# coding=utf-8
# 代码文件：chapter9/ch9.2.5.py
import os

from PyPDF2 import PdfFileReader, PdfFileWriter

# 设置输入目录
indir = r'data\in'
#  设置输出目录
outdir = r'data\out'


# 查找dir目录下ext后缀名的文件列表
# dir参数是文件所在目录，ext参数是文件后缀名

def findext(dir, ext):
    allfile = os.listdir(dir)
    # 返回过滤器对象
    files_filter = filter(lambda x: x.endswith(ext), allfile)
    # 从过滤器对象提取列表
    list2 = list(files_filter)
    return list2  # 返回过滤后条件文件名


# 合并PDF函数
# namelist要合并的文件名，output参数是合并后的文件名
def merge_pdfs(namelist, output):
    pdf_writer = PdfFileWriter()

    # 遍历每一个要合并的PDF文件
    for name in namelist:
        infile = os.path.join(indir, name)  # 将目录和文件名连接起来
        pdf_reader = PdfFileReader(infile)
        # 遍历PDF文件每一个页面
        for page_no in range(pdf_reader.numPages): # getNumPages()
            page = pdf_reader.getPage(page_no)
            # 添加页面到PdfFileWriter对象中
            pdf_writer.addPage(page)

    # 写入文件
    with open(output, 'wb') as out:
        pdf_writer.write(out)


if __name__ == '__main__':
    # 查找indir目录中所有PDF文件
    list2 = findext(indir, '.pdf')
    outfile = os.path.join(outdir, '合并后.pdf')  # 将目录和文件名连接起来
    merge_pdfs(list2, output=outfile)
    print('合并完成。')
